from typing import List
from langchain.vectorstores import FAISS
from langchain_core.tools import tool
from langchain.embeddings import OpenAIEmbeddings
from langchain.schema import Document

# 导入所有可用的工具
from tools import all_available_tools


def get_tool_retriever(tools: List[tool]):
    """
    创建一个基于 FAISS 的工具检索器。
    在实际生产环境中，可以使用更强大的 embedding 模型和向量数据库。
    """
    # 将每个工具的描述转换为 Document
    docs = [
        Document(page_content=t.description, metadata={"tool_name": t.name, "tool_instance": t})
        for t in tools
    ]

    # 这是一个简单的内存向量存储，仅用于演示
    # 实际应用中，您会连接到持久化的向量数据库
    vector_store = FAISS.from_documents(docs, OpenAIEmbeddings())

    # 创建一个检索器，返回与用户输入最相关的3个工具
    return vector_store.as_retriever(search_kwargs={"k": 3})
